/************************************************************************
 * Este archivo, representa la interfaz de creaión de un administrador
 * junto con las acciones asociadas a los eventos de cada componente
 * 
 * @system: veco-system
 * @description: Sistema de control vehicular
 * @version: 1.0
 * @Copyright © 2013 
 * 
 * @authores:
 * 
 *      > Alberione, Fernando    <falberione_037@gmail.com>
 * 
 *      > Boretto, Martin        <martinboretto@gmail.com>
 * 
 *      > Lenarduzzi, Federico   <fedeatenas@gmail.com>
 * 
 *      > Ocampo, Emanuel        <eocampo86@gmail.com>
 *
 *************************************************************************/
package Interfaces;

import SistemaCocheras.manejadorUsuarioAdmin;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.sql.*;
import javax.swing.JOptionPane;

public class nuevoAdministrador extends javax.swing.JFrame {

    private Connection conexion;

    private String campoDni = "";
    private String campoNombre = "";
    private String campoApellido = "";
    private int campoEdad = 0;
    private String campoDireccion = "";
    private String campoTelefono = "";
    private String campoContrasenia = "";       
    private String campoContraseniaC = "";          

    
    // ---------------------------------------------------------
    // ------- Seccion de constructores de la clase
    // ---------------------------------------------------------    

    /**
     * Constructor vacio 
     */
    public nuevoAdministrador() {
        initComponents();
        centrarJFrame();
    }// Fin constructor

    
    /**
     * Constructor NO vacio
     * @param con Representa la conexion de la base de datos
     */
    public nuevoAdministrador(Connection con) {
        this.conexion = con;
        initComponents();
        centrarJFrame();
    }// Fin constructor

    
    // ---------------------------------------------------------
    // ------- Seccion de metodos publicos 
    // --------------------------------------------------------- 
    
    /**
     * Metodo encargado de levantar una instancia de la clase 
     * @param args 
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new nuevoUsuario().setVisible(true);
            }
        });
    }// Fin main
    
    
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        lableDNIUsuario = new javax.swing.JLabel();
        campoTextoDNIUsuario = new javax.swing.JTextField();
        labelNombreUsuario = new javax.swing.JLabel();
        campoTextoNombreUsuario = new javax.swing.JTextField();
        labelApellidoUsuario = new javax.swing.JLabel();
        campoTextoApellidoUsuario = new javax.swing.JTextField();
        labelEdadUsuario = new javax.swing.JLabel();
        campoTextoEdadUsuario = new javax.swing.JTextField();
        labelDireccionUsuario = new javax.swing.JLabel();
        campoTextoDireccionUsuario = new javax.swing.JTextField();
        labelTelefonoUsuario = new javax.swing.JLabel();
        campoTextoTelefonoUsuario = new javax.swing.JTextField();
        labelContraseniaUsuario = new javax.swing.JLabel();
        campoTextoContraseniaUsuario = new javax.swing.JTextField();
        labelCContraseniaUsuario = new javax.swing.JLabel();
        campoTextoContraseniaUsuarioC = new javax.swing.JTextField();
        botonAceptar = new javax.swing.JButton();
        botonCancelar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("B&B - Nuevo administrador");

        lableDNIUsuario.setText("DNI :");

        labelNombreUsuario.setText("Nombre :");

        labelApellidoUsuario.setText("Apellido :");

        labelEdadUsuario.setText("Edad :");

        labelDireccionUsuario.setText("Direccion :");

        labelTelefonoUsuario.setText("Teléfono :");

        labelContraseniaUsuario.setText("Contraseña :");

        labelCContraseniaUsuario.setText("Confirmar Contraseña :");

        botonAceptar.setText("Aceptar");
        botonAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAceptarActionPerformed(evt);
            }
        });

        botonCancelar.setText("Cancelar");
        botonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCancelarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(19, 19, 19)
                .addComponent(labelTelefonoUsuario)
                .addGap(323, 323, 323))
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addGap(19, 19, 19)
                        .addComponent(botonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 130, Short.MAX_VALUE)
                        .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap(139, Short.MAX_VALUE)
                        .addComponent(campoTextoTelefonoUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(19, 19, 19)
                        .addComponent(labelNombreUsuario)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 76, Short.MAX_VALUE)
                        .addComponent(campoTextoNombreUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(19, 19, 19)
                        .addComponent(labelContraseniaUsuario)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 57, Short.MAX_VALUE)
                        .addComponent(campoTextoContraseniaUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(19, 19, 19)
                        .addComponent(lableDNIUsuario)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 95, Short.MAX_VALUE)
                        .addComponent(campoTextoDNIUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(19, 19, 19)
                        .addComponent(labelCContraseniaUsuario)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 7, Short.MAX_VALUE)
                        .addComponent(campoTextoContraseniaUsuarioC, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(19, 19, 19)
                        .addComponent(labelEdadUsuario)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 89, Short.MAX_VALUE)
                        .addComponent(campoTextoEdadUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(19, 19, 19)
                        .addComponent(labelApellidoUsuario)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 76, Short.MAX_VALUE)
                        .addComponent(campoTextoApellidoUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(19, 19, 19)
                        .addComponent(labelDireccionUsuario)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 70, Short.MAX_VALUE)
                        .addComponent(campoTextoDireccionUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(28, Short.MAX_VALUE))
        );

        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {botonAceptar, botonCancelar});

        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(25, 25, 25)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(campoTextoDNIUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lableDNIUsuario))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(labelNombreUsuario)
                    .addComponent(campoTextoNombreUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(campoTextoApellidoUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(labelApellidoUsuario))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(labelEdadUsuario)
                    .addComponent(campoTextoEdadUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(labelDireccionUsuario)
                    .addComponent(campoTextoDireccionUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(labelTelefonoUsuario)
                    .addComponent(campoTextoTelefonoUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(labelContraseniaUsuario)
                    .addComponent(campoTextoContraseniaUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(labelCContraseniaUsuario)
                    .addComponent(campoTextoContraseniaUsuarioC, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 26, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(19, 19, 19))
        );

        layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {botonAceptar, botonCancelar});

        pack();
    }// </editor-fold>//GEN-END:initComponents

    // ---------------------------------------------------------
    // ------- Seccion de metodos privados 
    // ---------------------------------------------------------    
    
    /**
     * Funcion encargada de centrar el dialogo en la pantalla
     */
    private void centrarJFrame(){
        Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frame =this.getSize();
        this.setLocation((pantalla.width-frame.width)/2, (pantalla.height-frame.height)/2);
    }// Fin centrarJFrame
    
    
    /**
     * Metodo encargado de realizar lo necesario (crear administrador) a 
     * traves del boton aceptar
     * @param evt Representa el evento del click
     */
    private void botonAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAceptarActionPerformed
        manejadorUsuarioAdmin nuevoUsuario = new manejadorUsuarioAdmin(this.conexion);
        this.campoDni = this.campoTextoDNIUsuario.getText();                          // Informacion que se carga en el campo de texto "DNI"
        this.campoNombre = this.campoTextoNombreUsuario.getText();                    // Informacion que se carga en el campo de texto "NOMBRE"
        this.campoApellido = this.campoTextoApellidoUsuario.getText();                // Informacion que se carga en el campo de texto "APELLIDO"
        if(this.campoTextoEdadUsuario.getText().compareTo("") != 0){
            this.campoEdad = Integer.parseInt(this.campoTextoEdadUsuario.getText());  // Informacion que se carga en el campo de texto "EDAD"
        }
        this.campoDireccion = this.campoTextoDireccionUsuario.getText();              // Informacion que se carga en el campo de texto "DIRECCION"
        this.campoTelefono = this.campoTextoTelefonoUsuario.getText();                // Informacion que se carga en el campo de texto "TELEFONO"
        this.campoContrasenia = this.campoTextoContraseniaUsuario.getText();
        this.campoContraseniaC = this.campoTextoContraseniaUsuarioC.getText();
        if(this.campoContrasenia.equals(this.campoContraseniaC)){             // Control de contraseña y su confirmacion
            try{
                if((this.campoDni.compareTo("") != 0)&& (!(nuevoUsuario.buscarAdministradorPorDni(this.campoDni).next()))
                &&(this.campoNombre.compareTo("") != 0)&&(this.campoApellido.compareTo("") != 0)&&
                (this.campoEdad >= 16)&&(this.campoDireccion.compareTo("") != 0)&&(this.campoTelefono.compareTo("") != 0)){   // Control de campos obligatorios
                    nuevoUsuario.insertarAdministrador(this.campoDni, this.campoNombre, this.campoApellido, this.campoEdad, this.campoDireccion, this.campoTelefono, this.campoContrasenia);
                    JOptionPane.showMessageDialog(null, "El nuevo usuario '"+this.campoNombre+" "+this.campoApellido+"' ha sido cargado satisfactoriamente en el sistema. ", "Sistema de Cocheras B&B", JOptionPane.INFORMATION_MESSAGE);
                    this.dispose();
                }
                else{
                    lanzarError();
                }
            }
            catch (Exception e){
                JOptionPane.showMessageDialog(null,"Ha ocurrido un error interno :"+ e, "Sistema de Cocheras B&B",JOptionPane.ERROR_MESSAGE);
            }
        }
        else{
            JOptionPane.showMessageDialog(null,"La contraseña ingresada no coincide con la confirmacion de la misma", "Sistema de Cocheras B&B",JOptionPane.ERROR_MESSAGE);
        }
    }//GEN-LAST:event_botonAceptarActionPerformed

    
    /**
     * Metodo encargado de cerrar la interfaz a traves del boton cancelar
     * @param evt Representa el evento del click
     */
    private void botonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCancelarActionPerformed
        this.dispose();
    }//GEN-LAST:event_botonCancelarActionPerformed

  
    /**
     * Metodo encargado de mostrar la interfaz de error por campos vacios o erroneos
     */
    private void lanzarError(){
        JOptionPane.showMessageDialog(null, "Se deben rellenar correctamente todos los campos.", "Sistema de Cocheras B&B",JOptionPane.ERROR_MESSAGE);
    }// Fin lanzarError 

    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonAceptar;
    private javax.swing.JButton botonCancelar;
    private javax.swing.JTextField campoTextoApellidoUsuario;
    private javax.swing.JTextField campoTextoContraseniaUsuario;
    private javax.swing.JTextField campoTextoContraseniaUsuarioC;
    private javax.swing.JTextField campoTextoDNIUsuario;
    private javax.swing.JTextField campoTextoDireccionUsuario;
    private javax.swing.JTextField campoTextoEdadUsuario;
    private javax.swing.JTextField campoTextoNombreUsuario;
    private javax.swing.JTextField campoTextoTelefonoUsuario;
    private javax.swing.JLabel labelApellidoUsuario;
    private javax.swing.JLabel labelCContraseniaUsuario;
    private javax.swing.JLabel labelContraseniaUsuario;
    private javax.swing.JLabel labelDireccionUsuario;
    private javax.swing.JLabel labelEdadUsuario;
    private javax.swing.JLabel labelNombreUsuario;
    private javax.swing.JLabel labelTelefonoUsuario;
    private javax.swing.JLabel lableDNIUsuario;
    // End of variables declaration//GEN-END:variables

}// Fin clase nuevoAdministrador
